package tp.tecnicasdisenio.model.validador;

import tp.tecnicasdisenio.dao.GrupoDaoInterface;
import tp.tecnicasdisenio.dao.MateriaDaoInterface;
import tp.tecnicasdisenio.dao.TrabajoPracticoDaoInterface;
import tp.tecnicasdisenio.model.AutoRespondedorInterface;
import tp.tecnicasdisenio.model.MailInterface;
import tp.tecnicasdisenio.model.entity.Alumno;
import tp.tecnicasdisenio.model.entity.Grupo;
import tp.tecnicasdisenio.model.entity.Materia;
import tp.tecnicasdisenio.model.entity.TrabajoPractico;
import tp.tecnicasdisenio.model.parser.ParserTituloEntregaTp;
import tp.tecnicasdisenio.util.EntityUtil;
import tp.tecnicasdisenio.util.FechaUtil;

public class ValidadorEntregaTp extends ValidadorAbstract{
	
	private GrupoDaoInterface grupoDao;
	private MateriaDaoInterface materiaDao;
	
	private ParserTituloEntregaTp parserTituloEntregaTp;
	private TrabajoPracticoDaoInterface trabajoPracticoDao;
	
	/**
	 * Valida que el alumno exista
	 * Valida que el grupo del alumno exista
	 * Valida que el trabajo practico exista
	 */
	@Override
	public boolean valido(MailInterface mail, AutoRespondedorInterface autoRespondedor) {
		Alumno alumno= alumnoDao.getPorEmail(mail.getFrom());
		if(!existe(alumno)){
			autoRespondedor.responderA(mail, "Mail invalido, alumno inexistente.");
			System.out.println("Mail invalido, alumno inexistente. Se responde mail.");
			return false;
		}
		
		Materia materia= materiaDao.getPorEmail(mail.getTo().get(0));
		Grupo grupo= grupoDao.getGrupoDel(alumno, materia, FechaUtil.getCuatrimestreActual());
		if(!tiene(grupo)){
			autoRespondedor.responderA(mail, "Mail invalido, alumno sin grupo");
			System.out.println("Mail invalido, alumno sin grupo. Se responde mail.");
			return false;
		}
		
		parserTituloEntregaTp.setMail(mail);
		TrabajoPractico trabajoPractico = trabajoPracticoDao.getPorId(EntityUtil.crearClaveTPCuatrimestreActual(materia, parserTituloEntregaTp.numeroTp()));
		if(!existe(trabajoPractico)){
			autoRespondedor.responderA(mail, "Mail invalido, no existe trabajo practico.");
			System.out.println("Mail invalido, no existe trabajo practico. Se responde mail.");
			return false;
		}
		
		return true;
	}

	public GrupoDaoInterface getGrupoDao() {
		return grupoDao;
	}

	public void setGrupoDao(GrupoDaoInterface grupoDao) {
		this.grupoDao = grupoDao;
	}

	public MateriaDaoInterface getMateriaDao() {
		return materiaDao;
	}

	public void setMateriaDao(MateriaDaoInterface materiaDao) {
		this.materiaDao = materiaDao;
	}

	public ParserTituloEntregaTp getParserTituloEntregaTp() {
		return parserTituloEntregaTp;
	}

	public void setParserTituloEntregaTp(ParserTituloEntregaTp parserTituloEntregaTp) {
		this.parserTituloEntregaTp = parserTituloEntregaTp;
	}

	public TrabajoPracticoDaoInterface getTrabajoPracticoDao() {
		return trabajoPracticoDao;
	}

	public void setTrabajoPracticoDao(TrabajoPracticoDaoInterface trabajoPracticoDao) {
		this.trabajoPracticoDao = trabajoPracticoDao;
	}
	
	

}
